<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<title>Attribute specifier sequence(since C23) - cppreference.com</title>
<meta charset="UTF-8">
<meta name="generator" content="MediaWiki 1.21.2">
<link rel="shortcut icon" href="../../../common/favicon.ico">
<link rel="stylesheet" href="../../../common/ext.css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" href="../../../common/site_modules.css">
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../../common/startup_scripts.js"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"c/language/attributes","wgTitle":"c/language/attributes","wgCurRevisionId":140389,"wgArticleId":19917,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"c/language/attributes","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1,"gadget-MathJax":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:9f05c6caceb9bb1a482b6cebd4c5a330 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-c {line-height: normal;}
.source-c li, .source-c pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for c
 * CSS class: source-c, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.c.source-c .de1, .c.source-c .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.c.source-c  {font-family:monospace;}
.c.source-c .imp {font-weight: bold; color: red;}
.c.source-c li, .c.source-c .li1 {font-weight: normal; vertical-align:top;}
.c.source-c .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.c.source-c .li2 {font-weight: bold; vertical-align:top;}
.c.source-c .kw1 {color: #0000dd;}
.c.source-c .kw2 {color: #0000ff;}
.c.source-c .kw3 {color: #0000dd;}
.c.source-c .kw4 {color: #0000ff;}
.c.source-c .co1 {color: #909090;}
.c.source-c .co2 {color: #339900;}
.c.source-c .coMULTI {color: #ff0000; font-style: italic;}
.c.source-c .es0 {color: #008000; font-weight: bold;}
.c.source-c .es1 {color: #008000; font-weight: bold;}
.c.source-c .es2 {color: #008000; font-weight: bold;}
.c.source-c .es3 {color: #008000; font-weight: bold;}
.c.source-c .es4 {color: #008000; font-weight: bold;}
.c.source-c .es5 {color: #008000; font-weight: bold;}
.c.source-c .br0 {color: #008000;}
.c.source-c .sy0 {color: #008000;}
.c.source-c .sy1 {color: #000080;}
.c.source-c .sy2 {color: #000040;}
.c.source-c .sy3 {color: #000040;}
.c.source-c .sy4 {color: #008080;}
.c.source-c .st0 {color: #008000;}
.c.source-c .nu0 {color: #000080;}
.c.source-c .nu6 {color:#000080;}
.c.source-c .nu8 {color:#000080;}
.c.source-c .nu12 {color:#000080;}
.c.source-c .nu16 {color:#000080;}
.c.source-c .nu17 {color:#000080;}
.c.source-c .nu18 {color:#000080;}
.c.source-c .nu19 {color:#000080;}
.c.source-c .ln-xtra, .c.source-c li.ln-xtra, .c.source-c div.ln-xtra {background-color: #ffc;}
.c.source-c span.xtra { display:block; }

/*]]>*/
</style><!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]--></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_attributes skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        <!-- /header -->
        <!-- content -->
<div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
<h1 id="firstHeading" class="firstHeading">Attribute specifier sequence<span class="t-mark-rev t-since-c23">(since C23)</span></h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../../c.html" title="c">c</a>‎ | <a href="../language.html" title="c/language">language</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="t-navbar" style=""><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../../c.html" title="c"> C</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="../language.html" title="c/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../header.html" title="c/header"> Headers</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../types.html" title="c/types"> Type support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../program.html" title="c/program"> Program utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../variadic.html" title="c/variadic"> Variadic function support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../error.html" title="c/error"> Error handling</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../memory.html" title="c/memory"> Dynamic memory management</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../string.html" title="c/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../algorithm.html" title="c/algorithm"> Algorithms</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../numeric.html" title="c/numeric"> Numerics</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../chrono.html" title="c/chrono"> Date and time utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../io.html" title="c/io"> Input/output support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../locale.html" title="c/locale"> Localization support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../thread.html" title="c/thread"> Concurrency support</a> <span class="t-mark-rev t-since-c11">(C11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="c/experimental"> Technical Specifications</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../index.html" title="c/symbol index"> Symbol index</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../language.html" title="c/language"> C language</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="basic_concepts.html" title="c/language/basic concepts">Basic concepts</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../keyword.html" title="c/keyword"> Keywords</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../preprocessor.html" title="c/preprocessor"> Preprocessor</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="statements.html" title="c/language/statements"> Statements</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="expressions.html" title="c/language/expressions"> Expressions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="initialization.html" title="c/language/initialization"> Initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="declarations.html" title="c/language/declarations"> Declarations</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="functions.html" title="c/language/functions"> Functions</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Miscellaneous</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="history.html" title="c/language/history"> History of C</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="c/experimental">Technical Specifications</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="declarations.html" title="c/language/declarations"> Declarations</a><div class="t-navbar-menu"><div><div style="display:inline-block">
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="pointer.html" title="c/language/pointer"> pointer</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="array.html" title="c/language/array"> array</a> </td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="enum.html" title="c/language/enum"><span class="t-lines"><span>enum</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="struct.html" title="c/language/struct"><span class="t-lines"><span>struct</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="union.html" title="c/language/union"><span class="t-lines"><span>union</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="bit_field.html" title="c/language/bit field"> bit field</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="atomic.html" title="c/language/atomic"> atomic types</a> <span class="t-mark-rev t-since-c11">(C11)</span></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="const.html" title="c/language/const"><span class="t-lines"><span>const</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="volatile.html" title="c/language/volatile"><span class="t-lines"><span>volatile</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="restrict.html" title="c/language/restrict"><span class="t-lines"><span>restrict</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c99">(C99)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="_Alignas.html" title="c/language/ Alignas"><span class="t-lines"><span>_Alignas</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="storage_duration.html" title="c/language/storage duration"> storage duration and linkage</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="extern.html" title="c/language/extern"> external and tentative definitions</a> </td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="typedef.html" title="c/language/typedef"><span class="t-lines"><span>typedef</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="static_assert.html" title="c/language/ Static assert"><span class="t-lines"><span>_Static_assert</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"> <strong class="selflink"> attributes</strong> <span class="t-mark-rev t-since-c23">(C23)</span></td></tr>
</table></div>
</div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><strong class="selflink"> Attributes</strong><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="attributes/deprecated.html" title="c/language/attributes/deprecated"><span class="t-lines"><span>deprecated</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c23">(C23)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="attributes/fallthrough.html" title="c/language/attributes/fallthrough"><span class="t-lines"><span>fallthrough</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c23">(C23)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="attributes/nodiscard.html" title="c/language/attributes/nodiscard"><span class="t-lines"><span>nodiscard</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c23">(C23)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="attributes/maybe_unused.html" title="c/language/attributes/maybe unused"><span class="t-lines"><span>maybe_unused</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c23">(C23)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="attributes/noreturn.html" title="c/language/attributes/noreturn"><span class="t-lines"><span>noreturn</span><span>_Noreturn</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c23">(C23)</span></span><span><span class="t-mark-rev t-since-c23">(C23)</span><span class="t-mark">(deprecated)</span></span></span></div></div></td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div></div>
<p>Introduces implementation-defined attributes for types, objects, expressions, etc.
</p>
<dl><dd><code><b>[[</b></code><span class="t-spar">attr</span><code><b>]]</b></code> <code><b>[[</b></code><span class="t-spar">attr1</span>, <span class="t-spar">attr2</span>, <span class="t-spar">attr3</span><code><b>(</b></code><span class="t-spar">args</span><code><b>)</b></code><code><b>]]</b></code> <code><b>[[</b></code><span class="t-spar">attribute-prefix</span><code><b>::</b></code><span class="t-spar">attr</span><code><b>(</b></code><span class="t-spar">args</span><code><b>)</b></code><code><b>]]</b></code> 
</dd></dl>
<p>Formally, the syntax is
</p>
<table class="t-sdsc-begin">

<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <code><b>[[</b></code> <span class="t-spar">attribute-list</span> <code><b>]]</b></code>
</td>
<td class="t-sdsc-nopad">
</td>
<td> <span class="t-mark-rev t-since-c23">(since C23)</span>
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr></table>
<p>where <span class="t-spar">attribute-list</span> is a comma-separated sequence of zero or more <span class="t-spar">attribute-token</span>s
</p>
<table class="t-sdsc-begin">

<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">standard-attribute</span>
</td>
<td> (1)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">attribute-prefix</span> <code><b>::</b></code> <span class="t-spar">identifier</span>
</td>
<td> (2)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">standard-attribute</span> <code><b>(</b></code> <span class="t-spar">argument-list</span> <code><b>)</b></code>
</td>
<td> (3)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td> <span class="t-spar">attribute-prefix</span> <code><b>::</b></code> <span class="t-spar">identifier</span> <code><b>(</b></code> <span class="t-spar">argument-list</span> <code><b>)</b></code>
</td>
<td> (4)
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr></table>
<div class="t-li1"><span class="t-li">1)</span> standard attribute, such as <span class="t-cc"><span class="mw-geshi c source-c"><span class="br0">[</span><span class="br0">[</span>fallthrough<span class="br0">]</span><span class="br0">]</span></span></span></div>
<div class="t-li1"><span class="t-li">2)</span> attribute with a namespace, such as <span class="t-cc"><span class="mw-geshi c source-c"><span class="br0">[</span><span class="br0">[</span>gnu<span class="sy4">::</span><span class="me2">unused</span><span class="br0">]</span><span class="br0">]</span></span></span></div>
<div class="t-li1"><span class="t-li">3)</span> standard attribute with arguments, such as <span class="t-cc"><span class="mw-geshi c source-c"><span class="br0">[</span><span class="br0">[</span>deprecated<span class="br0">(</span><span class="st0">"reason"</span><span class="br0">)</span><span class="br0">]</span><span class="br0">]</span></span></span></div>
<div class="t-li1"><span class="t-li">4)</span> attribute with both a namespace and an argument list, such as <span class="t-cc"><span class="mw-geshi c source-c"><span class="br0">[</span><span class="br0">[</span>gnu<span class="sy4">::</span><span class="me2">nonnull</span><span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="br0">]</span><span class="br0">]</span></span></span></div>
<h3><span class="mw-headline" id="Explanation">Explanation</span></h3>
<p>Attributes provide the unified standard syntax for implementation-defined language extensions, such as the GNU and IBM language extensions <code>__attribute__((...))</code>, Microsoft extension <code>__declspec()</code>, etc.
</p><p>An attribute can be used almost everywhere in the C program, and can be applied to almost everything: to types, to variables, to functions, to names, to code blocks, to entire translation units, although each particular attribute is only valid where it is permitted by the implementation: <code>[[expect_true]]</code> could be an attribute that can only be used with an <span class="t-c"><span class="mw-geshi c source-c"><span class="kw1">if</span></span></span>, and not with a class declaration. <code>[[omp::parallel()]]</code> could be an attribute that applies to a code block or to a <span class="t-c"><span class="mw-geshi c source-c"><span class="kw1">for</span></span></span> loop, but not to the type <code>int</code>, etc. (note these two attributes are fictional examples, see below for the standard and some non-standard attributes)
</p><p>In declarations, attributes may appear both before the whole declaration and directly after the name of the entity that is declared, in which case they are combined. In most other situations, attributes apply to the directly preceding entity.
</p><p>Two consecutive left square bracket tokens (<code>[[</code>) may only appear when introducing an attribute-specifier or inside an attribute argument.
</p><p>Besides the standard attributes listed below, implementations may support arbitrary non-standard attributes with implementation-defined behavior. All attributes unknown to an implementation are ignored without causing an error.
</p><p>Every <span class="t-spar">standard-attribute</span> is reserved for standardization. That is, every non-standard attribute is prefixed by a <span class="t-spar">attribute-prefix</span> provided by the implementation, e.g. <code>[[gnu::may_alias]]</code> and <code>[[clang::no_sanitize]]</code>.
</p>
<h3><span class="mw-headline" id="Standard_attributes">Standard attributes</span></h3>
<p>Only the following attributes are defined by the C standard. Every standard attribute whose name is of form <code>attr</code> can be also spelled as <code>__attr__</code> and its meaning is not changed.
</p>
<table class="t-dsc-begin">

<tr class="t-dsc">
<td> <code>[[<a href="attributes/deprecated.html" title="c/language/attributes/deprecated">deprecated</a>]]</code><span class="t-mark-rev t-since-c23">(C23)</span><br><code>[[deprecated("reason")]]</code><span class="t-mark-rev t-since-c23">(C23)</span>
</td>
<td>  indicates that the use of the name or entity declared with this attribute is allowed, but discouraged for some <span class="t-spar">reason</span>
</td></tr>



<tr class="t-dsc">
<td> <code>[[<a href="attributes/fallthrough.html" title="c/language/attributes/fallthrough">fallthrough</a>]]</code><span class="t-mark-rev t-since-c23">(C23)</span>
</td>
<td>  indicates that the fall through from the previous case label is intentional and should not be diagnosed by a compiler that warns on fall-through
</td></tr>



<tr class="t-dsc">
<td> <code>[[<a href="attributes/nodiscard.html" title="c/language/attributes/nodiscard">nodiscard</a>]]</code><span class="t-mark-rev t-since-c23">(C23)</span><br><code>[[nodiscard("reason")]]</code><span class="t-mark-rev t-since-c23">(C23)</span>
</td>
<td>  encourages the compiler to issue a warning if the return value is discarded
</td></tr>



<tr class="t-dsc">
<td> <code>[[<a href="attributes/maybe_unused.html" title="c/language/attributes/maybe unused">maybe_unused</a>]]</code><span class="t-mark-rev t-since-c23">(C23)</span>
</td>
<td>  suppresses compiler warnings on unused entities, if any
</td></tr>



<tr class="t-dsc">
<td> <code>[[<a href="attributes/noreturn.html" title="c/language/attributes/noreturn">noreturn</a>]]</code><span class="t-mark-rev t-since-c23">(C23)</span><br><code>[[<a href="attributes/noreturn.html" title="c/language/attributes/noreturn">_Noreturn</a>]]</code><span class="t-mark-rev t-since-c23">(C23)</span><span class="t-mark">(deprecated)</span>
</td>
<td>  indicates that the function does not return
</td></tr>

</table>
<h3><span class="mw-headline" id="Attribute_testing">Attribute testing</span></h3>
<table class="t-sdsc-begin">

<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"> <code><b>__has_c_attribute(</b></code> <span class="t-spar">attribute-token</span> <code><b>)</b></code>
</td>
<td class="t-sdsc-nopad">
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr></table>
<p>Checks for the presence of an attribute token named by <span class="t-spar">attribute-token</span>.
</p><p>For standard attributes, it will expand to the year and month in which the attribute was added to the working draft (see table below), the presence of vendor-specific attributes is determined by a non-zero integer constant.
</p><p><code>__has_c_attribute</code> can be expanded in the expression of <a href="../preprocessor/conditional.html" title="c/preprocessor/conditional"><tt>
#if</tt></a> and <a href="../preprocessor/conditional.html" title="c/preprocessor/conditional"><tt>
#elif</tt></a>.
It is treated as a defined macro by <a href="../preprocessor/conditional.html" title="c/preprocessor/conditional"><tt>
#ifdef</tt></a>, <a href="../preprocessor/conditional.html" title="c/preprocessor/conditional"><tt>
#ifndef</tt></a> and <a href="../preprocessor/conditional.html" title="c/preprocessor/conditional"><tt>defined</tt></a> but cannot be used anywhere else.
</p>
<table class="wikitable sortable">

<tr>
<th> <span class="t-spar">attribute-token</span>
</th>
<th> Attribute
</th>
<th> Value
</th>
<th> <span title="Standard in which the feature is introduced">Standard</span>
</th></tr>
<tr>
<td><code>deprecated</code>
</td>
<td><code>[[<a href="attributes/deprecated.html" title="c/language/attributes/deprecated">deprecated</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi c source-c"><span class="nu0">201904L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-c23">(C23)</span>
</td></tr>
<tr>
<td><code>fallthrough</code>
</td>
<td><code>[[<a href="attributes/fallthrough.html" title="c/language/attributes/fallthrough">fallthrough</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi c source-c"><span class="nu0">201904L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-c23">(C23)</span>
</td></tr>
<tr>
<td><code>maybe_unused</code>
</td>
<td><code>[[<a href="attributes/maybe_unused.html" title="c/language/attributes/maybe unused">maybe_unused</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi c source-c"><span class="nu0">201904L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-c23">(C23)</span>
</td></tr>
<tr>
<td><code>nodiscard</code>
</td>
<td><code>[[<a href="attributes/nodiscard.html" title="c/language/attributes/nodiscard">nodiscard</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi c source-c"><span class="nu0">202003L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-c23">(C23)</span>
</td></tr>
<tr>
<td><code>noreturn</code><br><code>_Noreturn</code>
</td>
<td><code>[[<a href="attributes/noreturn.html" title="c/language/attributes/noreturn">noreturn</a>]]</code><br><code>[[<a href="attributes/noreturn.html" title="c/language/attributes/noreturn">_Noreturn</a>]]</code>
</td>
<td><span class="t-c"><span class="mw-geshi c source-c"><span class="nu0">202202L</span></span></span>
</td>
<td><span class="t-mark-rev t-since-c23">(C23)</span>
</td></tr></table>
<h3><span class="mw-headline" id="Example">Example</span></h3>
<div class="t-example"><div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="br0">[</span><span class="br0">[</span>gnu<span class="sy4">::</span><span class="me2">always_inline</span><span class="br0">]</span><span class="br0">]</span> <span class="br0">[</span><span class="br0">[</span>gnu<span class="sy4">::</span><span class="me2">hot</span><span class="br0">]</span><span class="br0">]</span> <span class="br0">[</span><span class="br0">[</span>gnu<span class="sy4">::</span><span class="kw4">const</span><span class="br0">]</span><span class="br0">]</span> <span class="br0">[</span><span class="br0">[</span>nodiscard<span class="br0">]</span><span class="br0">]</span>
<span class="kw4">int</span> f<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// declare f with four attributes</span>
 
<span class="br0">[</span><span class="br0">[</span>gnu<span class="sy4">::</span><span class="me2">always_inline</span>, gnu<span class="sy4">::</span><span class="kw4">const</span>, gnu<span class="sy4">::</span><span class="me2">hot</span>, nodiscard<span class="br0">]</span><span class="br0">]</span>
<span class="kw4">int</span> f<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// same as above, but uses a single attr specifier that contains four attributes</span>
 
<span class="kw4">int</span> f<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="br0">}</span>
 
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
<span class="br0">}</span></pre></div></div>
</div>
<h3><span class="mw-headline" id="See_also">See also</span></h3>
<table class="t-dsc-begin">

</table>
<h3><span class="mw-headline" id="External_links">External links</span></h3>
<ul><li> <a rel="nofollow" class="external text" href="https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html#Attribute-Syntax">Attributes in GCC</a>
</li><li> <a rel="nofollow" class="external text" href="https://clang.llvm.org/docs/AttributeReference.html">Attributes in Clang</a>.
</li></ul>

<!-- 
NewPP limit report
Preprocessor visited node count: 3195/1000000
Preprocessor generated node count: 6976/1000000
Post‐expand include size: 74517/2097152 bytes
Template argument size: 16758/2097152 bytes
Highest expansion depth: 16/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:19917-0!*!0!!en!*!* and timestamp 20220618171149 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="https://en.cppreference.com/mwiki/index.php?title=c/language/attributes&amp;oldid=140389">https://en.cppreference.com/mwiki/index.php?title=c/language/attributes&amp;oldid=140389</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        <div id="cpp-footer-base" class="noprint">
            <div id="footer">
                        <div id="cpp-navigation">
            <h5>Navigation</h5>
            <ul><li><a href="https://en.cppreference.com/w/c/language/attributes">Online version</a></li><li>Offline version retrieved 2022-07-30 14:05.</li></ul></div>
                        <ul id="footer-info">
                                    <li id="footer-info-lastmod"> This page was last modified on 18 June 2022, at 10:11.</li>
                                    <li id="footer-info-viewcount">This page has been accessed 15,181 times.</li>
                            </ul>
                    </div>
        </div>
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../../common/skin_scripts.js"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler","ext.gadget.MathJax"], null, true);
}</script>
<script src="../../../common/site_scripts.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 0.033 secs. -->
	</body>
<!-- Cached 20220618194428 -->
</html>